/***********************************************************************************************//**
*\n  @file       device.hpp
*\n  @brief      设备device基类， 定义设备device公共接口
*\n  @details
*\n -----------------------------------------------------------------------------------
*\n  文件说明：
*\n       1. 设备device基类， 定义设备device公共接口
*\n		  2. 设备device派生类实现（override）公共接口;
*\n
*\n
*\n -----------------------------------------------------------------------------------
*\n  版本:   修改人:       修改日期:         描述:
*\n  V0.01   罗先能        2021.4.11          创建
*\n
***************************************************************************************************/
#pragma once
#ifndef EA_590150EA_67E0_4c6b_9C5D_4BE94DACF49E__INCLUDED_
#define EA_590150EA_67E0_4c6b_9C5D_4BE94DACF49E__INCLUDED_

/**************************************************************************************************
* 头文件
***************************************************************************************************/
#include "bus.hpp"


/**************************************************************************************************
* 宏定义、结构定义
***************************************************************************************************/
#ifdef __cplusplus

/// 纯虚拟基类（声明公共接口，不能实例化）
class TDeviceInterface
{
public:
	virtual int Init () = 0;
	virtual int Open (void *handle) = 0;
	virtual int Close(void *handle) = 0;
	virtual int Load(const char *file) = 0;
	virtual int Lock  () = 0;
	virtual int Unlock() = 0;
	virtual int Ioctl(long cmd, void *pBuf, long *pSize) = 0;
	virtual int Read (long offset, void *pBuf, long iSizeToRead) = 0;
	virtual int Write(long offset, void *pBuf, long iSizeToWrite) = 0;
};


/// 设备基类
class TDevice : public TDeviceInterface
{
public:
	TDevice();
	TDevice(const char name[], TBus *bus=NULL);
	virtual ~TDevice();


protected:
	char  mName[64];		 ///< 实例名称
	TBus *pBus; 			 ///< bus总线
	pthread_rwlock_t mLock;  ///< 锁

	/* ------ 从基类继承 --------------------- */
public:
	virtual int Init () 											override;
	virtual int Open (void *pHandle) 								override;
	virtual int Close(void *pHandle) 								override;
	virtual int Load(const char *file) 								override;
	virtual int Lock  () 											override;
	virtual int Unlock() 											override;
	virtual int Ioctl(long cmd, void *pBuf, long *pSize) 			override;
	virtual int Read (long offset, void *pBuf, long iSizeToRead) 	override;
	virtual int Write(long offset, void *pBuf, long iSizeToWrite)	override;

};


/**************************************************************************************************
* 全局变量声明、定义
***************************************************************************************************/


/**************************************************************************************************
* 私有变量声明、定义
***************************************************************************************************/


/**************************************************************************************************
* 私有函数声明、定义
***************************************************************************************************/


/**************************************************************************************************
* 全局函数声明、定义
***************************************************************************************************/


#endif // __cplusplus
#endif // !defined(EA_590150EA_67E0_4c6b_9C5D_4BE94DACF49E__INCLUDED_)




